import toQueryString from '../data/toQueryString.js';
import runtimeType from './runtimeType.js';

/**
 * 跳转页面【异步方法】
 * @description 跳转页面
 * @param {String} url 跳转页面地址
 * @param {Object} data 页面传参
 * @param {String} type = [open|replace|tab|relaunch] 跳转方式，值域解释：open-当页入栈跳转、replace-清除当页再跳转、tab-会关闭其它非tab、relaunch-重新打开
 */
function pageJump(url = '', data = {}, type = 'open') {
	
	// url参数有效，才执行
	if (typeof(url)=="string" && url)
	{
		// 初始化页面最终地址
		var path_page = url;
		// 将数据转换为名称/值对编码字符串
		var str_query = toQueryString(data);
		// 如果转换成功
		if (str_query) { path_page = path_page + '?' + str_query; }
        
        // 获取当前运行环境
        var runType = runtimeType();
		
		// 清除当页再跳转
		if (type == "replace")
        {
            // 如果是“非UNI”环境
            if (runType == 'nonUNI') {
                // js页面重定向
                window.location.replace(path_page);
            }
            // 如果是UNI环境
            else {
                // 调用uni跳转api
                uni.redirectTo({ url: path_page, fail: (msg) => { console.error('===== pageJump() 失败：', msg); } });
            }
		}
		// 清除全部页再跳转
		else if (type == "relaunch")
        {
            // 如果是“非UNI”环境
            if (runType == 'nonUNI') {
                // 获取当前页面栈长度 - 1
                var langth_history = window.history.length - 1;
                // 页面返回到栈最底层
                window.history.go()(-langth_history);
                // 修改当前历史记录实体
                window.history.replaceState({}, '', path_page);
            }
            // 如果是UNI环境
            else {
                // 调用uni跳转api
                uni.reLaunch({ url: path_page, fail: (msg) => { console.error('===== pageJump() 失败：', msg); } });
            }
		}
		// tab导航跳转
		else if (type == "tab")
        {
            // 如果是“非UNI”环境
            if (runType == 'nonUNI') {
                // 获取当前页面栈长度 - 1
                var langth_history = window.history.length - 1;
                // 页面返回到栈最底层
                window.history.go()(-langth_history);
                // 修改当前历史记录实体
                window.history.replaceState({}, '', path_page);
            }
            // 如果是UNI环境
            else {
                // 调用uni跳转api
                uni.switchTab({ url: path_page, fail: (msg) => { console.error('===== pageJump() 失败：', msg); } });
            }
		}
		// 新窗口跳转
		else if (type == "open")
		{
            // 如果是“非UNI”环境
            if (runType == 'nonUNI') {
                // js打开新窗口
                window.open(path_page);
            }
            // 如果是UNI环境
            else {
                // 调用uni跳转api
                uni.navigateTo({ url: path_page, fail: (msg) => { console.error('===== pageJump() 失败：', msg); } });
            }
		}
        // 无设置的默认跳转
		else {
			// 如果是“非UNI”环境
			if (runType == 'nonUNI') {
			    // js页面跳转
                window.location.href = path_page;
			}
			// 如果是UNI环境
			else {
			    // 调用uni跳转api
			    uni.navigateTo({ url: path_page, fail: (msg) => { console.error('===== pageJump() 失败：', msg); } });
			}
		}
		
	}
	
}

export default pageJump;